// TODO: 25/5/30
/*
常量是不能变化的量，这个变量是一个特殊的变量，无法改变的，需要用关键字const
两个区别：变量的定义使用var，常量的定义就是const
那么是什么机制导致它无法改变的？
GO语言的底层约定，实际上他是刻意去改变的需要跳过常量名，去直接找到内存地址进行修改值
*/

// 常量
package main

import "fmt"

func main() {
	//我们通常定义常量的时候建议大家是用大写字母来定义变量名，以此来区分与普通变量
	//一旦定义之后是不会发生变化的
	const URL string = "www.wanghongyu.com"

	//在go语言定义常量不能使用其语法糖 :=
	//这个语法糖只能定义变量
	/*
		const name := "zhangsan"
		fmt.Println(name)
		//这么去定义就会报错！
	*/

	//在常量中有两种定义格式：
	//显示定义：
	//const 常量名 type = value
	const U string = "baidu"
	//隐式定义：常量的自动推导是可以省略一些基础类型
	//const 常量名 [type] = value
	const URL2 string = "www.bit.com"

	fmt.Println(U)
	fmt.Println(URL2)

	//可以同时定义多个常量
	const URL3, URL4 string = "wby", "lzj"
	fmt.Println(URL3)
	fmt.Println(URL4)

	// 在我们真实的世界内也是有很多不会发生变化的量
	// 那么在程序中对应的就是常量
	const PI = 3.14
	//固定的东西，建议统一定义成常量
	const LENGTH int = 8000
	const WIDTH int = 8000
	fmt.Println(LENGTH)
	//常量是无法被修改的

	//常量和变量放置的内存地址不同（栈，堆，常量池）
	//程序正常的执行，压栈
}

/*
在GO语言中有自动的垃圾回收机制，我们都了解了在其中不允许定义完变量，
而不去使用变量的情况，这种情况会报错
*/
